From bde93ac61aaabb798aa85020c1daf47632c50b05 Mon Sep 17 00:00:00 2001 From: "kaf24@scramble.cl.cam.ac.uk" Date: Mon, 7 Feb 2005 17:20:50 +0000 Subject: [PATCH] bitkeeper revision 1.1159.212.111 (4207a372uscrEafJDzNOVuj8gyt_Fw) SYSCALL fixes. Signed-off-by: keir.fraser@cl.cam.ac.uk --- xen/arch/x86/boot/x86_64.S | 4 ++-- xen/arch/x86/x86_64/entry.S | 7 ++++--- xen/arch/x86/x86_64/traps.c | 2 +- xen/include/asm-x86/config.h | 4 ++-- xen/include/public/arch-x86_64.h | 8 ++++---- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/xen/arch/x86/boot/x86_64.S b/xen/arch/x86/boot/x86_64.S index d3414a3816..9d61523138 100644 --- a/xen/arch/x86/boot/x86_64.S +++ b/xen/arch/x86/boot/x86_64.S @@ -193,8 +193,8 @@ ENTRY(gdt_table) .quad 0x00af9a000000ffff /* 0x0810 ring 0 code, 64-bit mode */ .quad 0x00cf92000000ffff /* 0x0818 ring 0 data */ .quad 0x00cffa000000ffff /* 0x0823 ring 3 code, compatibility */ - .quad 0x00affa000000ffff /* 0x082b ring 3 code, 64-bit mode */ - .quad 0x00cff2000000ffff /* 0x0833 ring 3 data */ + .quad 0x00cff2000000ffff /* 0x082b ring 3 data */ + .quad 0x00affa000000ffff /* 0x0833 ring 3 code, 64-bit mode */ .quad 0x0000000000000000 /* unused */ .fill 4*NR_CPUS,8,0 /* space for TSS and LDT per CPU */ diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index 7dd3fd342c..447b77e9b0 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -12,14 +12,15 @@ #include ENTRY(hypercall) + sti movl $__GUEST_SS,8(%rsp) pushq %r11 pushq $__GUEST_CS pushq %rcx pushq $0 SAVE_ALL - andq $(NR_hypercalls-1),%rax - leaq SYMBOL_NAME(exception_table)(%rip),%rcx + andq $(NR_hypercalls-1),%rax + leaq SYMBOL_NAME(hypercall_table)(%rip),%rcx callq *(%rcx,%rax,8) RESTORE_ALL addq $8,%rsp @@ -42,7 +43,7 @@ error_code: movl XREGS_entry_vector(%rsp),%eax leaq SYMBOL_NAME(exception_table)(%rip),%rdx callq *(%rdx,%rax,8) - jmp restore_all_xen + jmp restore_all_xen ENTRY(divide_error) pushq $0 diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c index 323ea6865c..96ae0424b4 100644 --- a/xen/arch/x86/x86_64/traps.c +++ b/xen/arch/x86/x86_64/traps.c @@ -221,7 +221,7 @@ void __init percpu_traps_init(void) * Common SYSCALL parameters. */ - wrmsr(MSR_STAR, 0, (FLAT_RING3_CS64<<16) | __HYPERVISOR_CS); + wrmsr(MSR_STAR, 0, (FLAT_RING3_CS32<<16) | __HYPERVISOR_CS); wrmsr(MSR_SYSCALL_MASK, ~EF_IE, 0U); /* disable interrupts */ } diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h index 377d18975c..25d1a7657a 100644 --- a/xen/include/asm-x86/config.h +++ b/xen/include/asm-x86/config.h @@ -191,9 +191,9 @@ extern void __out_of_line_bug(int line) __attribute__((noreturn)); #define __HYPERVISOR_DS32 0x0818 #define __HYPERVISOR_DS __HYPERVISOR_DS64 -#define __GUEST_CS 0x082b +#define __GUEST_CS 0x0833 #define __GUEST_DS 0x0000 -#define __GUEST_SS 0x0833 +#define __GUEST_SS 0x082b /* For generic assembly code: use macros to define operation/operand sizes. */ #define __OS "q" /* Operation Suffix */ diff --git a/xen/include/public/arch-x86_64.h b/xen/include/public/arch-x86_64.h index 4ab9bcca79..530e2431d1 100644 --- a/xen/include/public/arch-x86_64.h +++ b/xen/include/public/arch-x86_64.h @@ -43,11 +43,11 @@ */ #define FLAT_RING3_CS32 0x0823 /* GDT index 260 */ -#define FLAT_RING3_CS64 0x082b /* GDT index 261 */ -#define FLAT_RING3_DS32 0x0833 /* GDT index 262 */ +#define FLAT_RING3_CS64 0x0833 /* GDT index 261 */ +#define FLAT_RING3_DS32 0x082b /* GDT index 262 */ #define FLAT_RING3_DS64 0x0000 /* NULL selector */ -#define FLAT_RING3_SS32 0x0833 /* GDT index 262 */ -#define FLAT_RING3_SS64 0x0833 /* GDT index 262 */ +#define FLAT_RING3_SS32 0x082b /* GDT index 262 */ +#define FLAT_RING3_SS64 0x082b /* GDT index 262 */ #define FLAT_GUESTOS_DS64 FLAT_RING3_DS64 #define FLAT_GUESTOS_DS32 FLAT_RING3_DS32 -- 2.30.2